#pragma once

#include <algorithm/analytical_model/Grid.h>
#include <algorithm/shared/utils/Vec3.h>
#include <utils/HasValue.h>
#include <utils/ParaUtils.h>

#include <boost/describe.hpp>

namespace solar::inline analytical
{
    class RectangleGrid : public Grid
    {
        public:
#include <utils/class_name.inc>
        private:
            // Grid左上角坐标？
            Vec3 position_ = {kUndefined, kUndefined, kUndefined};
            Vec3 size_ = {kUndefined, kUndefined, kUndefined};
            Vec3 interval_ = {kUndefined, kUndefined, kUndefined};
            std::uint64_t num_heliostats_;
            BOOST_DESCRIBE_CLASS(RectangleGrid, (Grid), (), (),
                                 (position_, size_, interval_, num_heliostats_))
    };
} // namespace solar::inline analytical
#define CURRENT_CLASS_NAME RectangleGrid
#include <utils/class_describe_header.inc>
SOLAR_DESCRIBE_CLASS(RectangleGrid, (Grid), (), (), (position_, size_, interval_, num_heliostats_))
